import axios from 'axios';
import axiosRetry from 'axios-retry';

// 超时处理，重新发送请求
axiosRetry(axios, {
	retries: 10,
	retryDelay: () => 1000,
	shouldResetTimeout: true,
	retryCondition: () => {
		// if (e.message.includes("timeout") || e.message.includes('status code')) {
		// 	return true;
		// } else {
		// 	return false;
		// };
	}
});

// 请求拦截，做一个加载中的状态
axios.interceptors.request.use((config) => {
	return config;
}, (e) => {
	return Promise.reject(e);
})

// 响应拦截或数据
axios.interceptors.response.use((response) => {
	return response;
}, ({response}) => {
	if(response){
		let message;
		switch (response.status) {
			case 400:
				message = '错误请求'
				break;
			case 401:
				message = '未登录,请重新登录'
				break;
			case 403:
				message = '决绝访问'
				break;
			case 404:
				message = '请求错误，未找到该资源'
				break;
			case 405:
				message = '请求方法未允许'
				break;
			case 408:
				message = '请求超时'
				break;
			case 500:
				message = '服务器出错'
				break;
			case 501:
				message = '网络未实现'
				break;
			case 502:
				message = '网络错误'
				break;
			case 503:
				message = '服务不可用'
				break;
			case 504:
				message = '网络超时'
				break;
			case 505:
				message = 'http版本不支持该请求'
				break;
			default:
				message = '连接错误'
		}
		console.log(message);
		return false;
	}else{
		//服务器连结果都没有返回  有可能是断网或者服务器奔溃
		if (!window.navigator.online){
			return;
		}else{
			return Promise.reject(response);
		}
	}
})

// axios发送get请求，url地址，params请求头参数，method请求方式
export const request = async (url, params, method) => {
	try{
		let res = await axios[method](url, params);
		return res.data && res.data.data || res.data;
	}catch(e){
		console.log(e);
	}
}